package com.hay.oss;

import com.hay.oss.bo.OssFile;
import com.hay.oss.util.FileUtil;

import java.io.InputStream;
import java.util.Objects;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;

/**
 * 对象存储功能模版(存储通用功能)
 * @author LiMouRen
 * @date 2024/5/28
 */
public interface OssTemplate {

    /**
     * 创建相对地址
     * @param category 目录
     * @param originalFileName 文件原名
     * @param useOriginalName true 使用原名称
     * @return 文件相对地址
     */
    default String createRelativeUrl(String category,String originalFileName,Boolean useOriginalName){
        if(category.charAt(0) == OssConstant.SLASH.charAt(0)){
            category = category.substring(1);
        }
        return Objects.equals(useOriginalName,Boolean.TRUE) ? category + OssConstant.SLASH + originalFileName : category + OssConstant.SLASH + randomUuid() + OssConstant.DOT + FileUtil.getExtension(originalFileName);
    }

    /**
     * 生成随机字符串
     * @return 随机字符串
     */
    default String randomUuid() {
        ThreadLocalRandom random = ThreadLocalRandom.current();
        return (new UUID(random.nextLong(), random.nextLong())).toString().replace("-", "");
    }

    /**
     * 上传文件
     * @param category 文件前缀,如 product/20240115
     * @param originalFileName 文件原名
     * @param input 流
     * @param useOriginalName true 使用原名
     * @return 文件参数
     */
    OssFile uploadFile(String category, String originalFileName, InputStream input, Boolean useOriginalName);

    /**
     * 获取输入流
     * @param relativeUrl 相对地址，如 product/20240115/1.jpg
     * @return
     */
    InputStream getInputStream(String relativeUrl);

    /**
     * 删除文件
     * @param relativeUrl 相对地址，如 product/20240115/1.jpg
     */
    void removeFile(String relativeUrl);

}
